iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 20
0
Software Development

從零開始的Python練成記系列 第 20

[Day 20]遞迴式計算的小實驗:N階乘法

  • 分享至 

  • xImage
  •  

今天,剛好接到同學的訊息問我有關Java的遞迴式運算,也就是這篇文章的主題「N階乘法」,那時候看了一下Java的程式碼並稍微讓運作平台進行運作,輸出結果沒有問題,就先來看看程式碼:
不得不說,這不是Python我知道

public class Nsteptimes {
	public Nsteptimes() {//建立空白方法助於接下來的物件呼叫
	}
	public int Factorial(int n) {
		if(n==0) {
			return 1;
		}else {
			return n*Factorial(n-1);
            //比較有經驗的人應該就會發現這裡有遞迴架構
		}
	}
	public static void main(String args[]) {
		Nsteptimes nst = new Nsteptimes();
		System.out.print(nst.Factorial(5));
	}
}
//輸出結果為120,數據正確

那就來簡單解釋一下遞迴的架構吧:
藉由上方的程式碼會先經過if/else的判斷,進到下方else的輸出,會導出Factorial(5) = 5 * Factorial(4),之後又會因為 Factorial(4)未定義的關係,又進一步判斷並轉換為5 * Factorial(4) = 5 * (4 * Factorial(3)),之後不斷的判斷到Factorial(0)才有定義為1,而不停堆疊的乘法計算便可以開始進行,此刻的程式碼就是:Factorial(5) = 5*(4*(3*(2*(1*(1))))) = 120


好啦,前面的鋪陳/解釋也差不多了,那就進到Python的程式碼吧:

def NstepMode(read_in):
    if type(read_in) is not int:
        print("格式錯誤,請重新執行程式!")
    if read_in < 0:
        print("N階乘最小值為 0! = 1,小於0之階乘不存在")
    elif read_in == 0:
        return 1
    else:
        return read_in * NstepMode(read_in-1)

print(NstepMode(5))
"""輸出結果為120,輸出正確"""

上一篇
[Day 19]資料結構:比Dictionary(目錄)架構更像二維陣列
下一篇
[Day 21]曾經,我在Java的最大罩門:檔案讀寫
系列文
從零開始的Python練成記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言